package com.ctsi.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ctsi.core.common.entity.LoginUser;
import com.ctsi.core.common.node.LoginMenuTreeNode;
import com.ctsi.system.entity.Menu;
import com.ctsi.system.vo.MenuResVO;
import com.ctsi.system.vo.MenuTreeResVO;

import java.util.List;

/**
 * <p>
 * 系统菜单表 服务类
 * </p>
 *
 * @author wang xiao xiang
 */
public interface IMenuService extends IService<Menu> {

	/**
	 * 获取用户权限相关信息
	 *
	 * @param userId 用户id
	 * @return 权限集合
	 */
	List<String> getLoginPermissions(Long userId, Integer userType);


	/**
	 * 获取用户菜单所属的应用编码集合
	 *
	 * @param userId 用户ID
	 * @return 用户菜单所属的应用编码集合
	 */
	List<String> getUserMenuAppCodeList(Long userId, Integer userType);

	/**
	 * 获取用户AntDesign菜单相关信息，前端使用
	 *
	 * @param userId  用户ID
	 * @param appCode 应用编码
	 * @return AntDesign菜单信息结果集
	 */
	List<LoginMenuTreeNode> getLoginMenusAntDesign(Long userId, String appCode, Integer userType);

	/**
	 * 查询所有菜单树
	 *
	 * @param menu 菜单对象
	 * @return 菜单列表
	 */
	List<MenuResVO> listAll(Menu menu);

	/**
	 * 根据应用查询菜单树
	 *
	 * @param menu 应用
	 * @return 菜单树列表
	 */
	List<MenuTreeResVO> tree(Menu menu);

	/**
	 * 授权菜单树
	 *
	 * @param user 登录用户信息
	 * @param menu 菜单对象
	 * @return 菜单树响应VO
	 */
	List<MenuTreeResVO> grantTree(LoginUser user, Menu menu);

	/**
	 * 设置菜单
	 *
	 * @param menu 菜单对象
	 * @return boolean
	 */
	boolean setMenu(Menu menu);

	/**
	 * 删除菜单
	 *
	 * @param ids
	 * @return boolean
	 */
	boolean delMenu(List<Long> ids);
}
